package redis_springboot.demo.mq;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**
 * @author： pang-yun
 * @date： 2021-12-23 14:17
 * 功能目的 ：用于
 */
@Slf4j
@RestController
@RequestMapping("/ttl")
public class RabbitMqController {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @GetMapping("sendMsg/{message}")
    public void sendMessage(@PathVariable String message) {

        log.info("当前时间: {},发送一条消息给两个TTL队列: {}", new Date().toString(), message);
        rabbitTemplate.convertAndSend(MQConst.NORMAL_EXCHANGE, MQConst.X_QA, "消息来自 ttl-1 为10s的队列 " + message);
        rabbitTemplate.convertAndSend(MQConst.NORMAL_EXCHANGE, MQConst.X_QB, "消息来自 ttl-2 为40s的队列 " + message);
    }

    //进入可以设置过期时间的消息对列   传入时间为 毫秒   后缀加 000 变为 秒
    @GetMapping("sendMsg/{message}/{ttlTime}")
    public void sendMessage(@PathVariable String message,
                            @PathVariable String ttlTime) {

        log.info("当前时间: {},发送一条过期时间为: {}秒 消息给两个TTL队列: {}", new Date().toString(), ttlTime, message);
        rabbitTemplate.convertAndSend(MQConst.NORMAL_EXCHANGE, MQConst.X_QC, message, msg -> {
            msg.getMessageProperties().setExpiration(ttlTime + "000");
            return msg;
        });
    }

    // 运用插件的 进行消息的生产
    @GetMapping("sendDelayMsg/{message}/{delayTime}")
    public void sendDelayedMessage(
            @PathVariable String message,
            @PathVariable String delayTime
    ) {
        log.info("当前时间: {},发送一条过期时间为: {}秒 消息给延时队列队列: {}", new Date().toString(), delayTime, message);
        rabbitTemplate.convertAndSend(MQConst.DELAY_EXCHANGE, MQConst.DELAY_ROUTE_KEY, message, msg -> {
            msg.getMessageProperties().setExpiration(delayTime + "000");
            return msg;
        });

    }

}
